會提到這個是因為剛好在BottomSheetBehavior.BottomSheetCallback中使用到這個東西
一般我們在判斷狀態時,會習慣用Enum來表示狀態機。
所以當我們有狀態要判斷時
用Enum表示
enum class StateEnum(var value:Int) {
STATE_DRAGGING(1),
STATE_SETTLING(2),
STATE_EXPANDED(3),
STATE_COLLAPSED(4),
STATE_HIDDEN(5),
STATE_HALF_EXPANDED(6)
}
使用時
var value : Int = number
when(value){
StateEnum.STATE_DRAGGING.value ->{ //do somethings}
StateEnum.STATE_SETTLING.value ->{ //do somethings}
StateEnum.STATE_EXPANDED.value ->{ //do somethings}
StateEnum.STATE_COLLAPSED.value ->{ //do somethings}
StateEnum.STATE_HIDDEN.value ->{ //do somethings}
StateEnum.STATE_HALF_EXPANDED.value ->{ //do somethings}
}
或是
var value : StateEnum = state
when(value){
StateEnum.STATE_DRAGGING ->{ //do somethings}
StateEnum.STATE_SETTLING ->{ //do somethings}
StateEnum.STATE_EXPANDED ->{ //do somethings}
StateEnum.STATE_COLLAPSED ->{ //do somethings}
StateEnum.STATE_HIDDEN ->{ //do somethings}
StateEnum.STATE_HALF_EXPANDED ->{ //do somethings}
}
但是Java中的Enum曾因為占用記憶體使用量而曾經被Google列為不建議使用,為此Google特意引入了一些相關的註解來替代列舉。
當我們設定好BottomSheetBehavior的狀態
public class States {
public static final int STATE_DRAGGING = 1;
public static final int STATE_SETTLING = 2;
public static final int STATE_EXPANDED = 3;
public static final int STATE_COLLAPSED = 4;
public static final int STATE_HIDDEN = 5;
public static final int STATE_HALF_EXPANDED = 6;
@IntDef({STATE_DRAGGING, STATE_SETTLING, STATE_EXPANDED})
@Retention(RetentionPolicy.SOURCE)
public @interface StateInt {
}
public int getInt(@States.StateInt int state){
return state;
}
}
使用方法為
var mState=States().getInt(States.STATE_HIDDEN)
...
優點
除了可以減少資源占用量之外,
還可以使用@IntDef定義該States().getInt存取範圍
所以像上面var mState=States().getInt(States.STATE_HIDDEN)在編譯時是會報錯的,因為States.STATE_HIDDEN並不在存取範圍內
@IntDef({STATE_DRAGGING, STATE_SETTLING, STATE_EXPANDED})
要弄懂@IntDef其實還有很多東西要看,不過先簡單的知道有這個東西就好。
完賽了。
其實最終的感想就是這3個字。
你我都聽過什麼這不是終點,而是逗點甚至只是人生的一個頓號。
你我都知道這雞湯看起來很好喝,但是每個人人生的食譜從來都不會一樣,就算照著作還是會有差異。
所以不要在意什麼 :
我都做得到,相信你也可以。
我當初那麼忙都可以,為什麼你不行之類的話語。
我們每個人生存的環境,接受的教育,到目前培養的能力經歷,需要承擔的責任與苦楚造就了現在正在看這篇文章的你我。
我們不一樣,但是可以朝著同一個目標前進。
我們不一樣,體諒包容或是不認同都是每個人的選擇。
我們不一樣,價值觀不同那就不同吧,但是請尊重每個人的價值。
如果你到目前對人生仍是樂觀堅強,請你繼續保持,相信這份正向能量可以溫暖很多你身邊的人。
如果你曾經遇過風雨、受過傷而仍持續前行,請確信你的韌性可以替周圍的人帶來勇氣。
如果你正遭遇痛楚,請試著尋求幫助,無論是自助或是人助,最終都會以各種形式過去的。
對目前的我,起碼是參賽之前的我來說,為自己設立一個目標並且明確地持續前進,其實是難以想像的。接受鐵人賽邀請之後,我曾考慮過不參加。原因有很多,但主要是我對目前的處境感到不安定。
而在今天我碰觸到了完賽的里程碑,過程中需要感謝的人事物很多,那就帶著這份心情繼續過日子吧。
謝謝各位。